<?php

class OperacionesPeer extends BaseOperacionesPeer {

    static public function existe() {
        $operacion = OperacionesPeer::doSelectOne(new Criteria());

        if (!empty($operacion)) {
            return true;
        } else {
            return false;
        }
    }

    static public function ObtenerUltima() {

        if (self::existe()) {
            $criteria = new Criteria();
            $criteria->addDescendingOrderByColumn(OperacionesPeer::OP_ID);
            $operacion = OperacionesPeer::doSelectOne($criteria);

            return $operacion;
        }

        return null;
    }

    static public function obtenerCajaExistenteDelDia() {
        $opIngreso = sfConfig::get('app_caja_operacion_ingreso');

        $c = new Criteria();
        $c->add(self::CREATED_AT, date('Y-m-d') . '%', Criteria::LIKE);
        $operaciones_del_dia = self::doSelect($c);

        if (!empty($operaciones_del_dia)) {

            $saldoTotal = 0;

            foreach ($operaciones_del_dia as $c) {
                $montoOp = $c->getOpMonto();
                $tipoOp = $c->getOpTipo();
                if ($tipoOp == $opIngreso) {
                    $saldoTotal+=$montoOp;
                } else {
                    $saldoTotal-=$montoOp;
                }
            }
            return $saldoTotal;
        } else {
            return sfConfig::get('app_caja_valor_inicial_diario');
        }
    }

    static public function obtenerDiferencia() {
        $caja_inicial = sfConfig::get('app_caja_valor_inicial_diario');
        $caja_existente = self::obtenerCajaExistenteDelDia();
        return round(intval($caja_existente) - intval($caja_inicial), 2);
    }

    static public function agregarOperacion($monto, $motivo, $operacionIngreso, $usuario) {
        try {
            $operacion = new Operaciones();
            $operacion->agregarOperacion($monto, $motivo, $operacionIngreso, $usuario);
            return $operacion;
        } catch (Exception $e) {
            return false;
        }
    }

}
